
// Taurus.cpp : Defines the class behaviors for the application.
//

#include "stdafx.h"
#include "Taurus.h"
#include "TaurusDlg.h"
#include "Taurus/include/MainFrame.h"

#include "Taurus_Common/IViewerModule.h"
#include "Taurus_Common/IWorklistModule.h"
#include "Taurus_Common/MonitorAdmin.h"
#include "Taurus_Common/SystemEnvironment.h"
#include "dcmtk/oflog/configrt.h"

#include "Taurus/AppGlobalInstanceSet.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CTaurusApp

BEGIN_MESSAGE_MAP(CTaurusApp, CWinApp)
	ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()


// CTaurusApp construction

CTaurusApp::CTaurusApp()
{
	// TODO: add construction code here,
	// Place all significant initialization in InitInstance
}


// The one and only CTaurusApp object

CTaurusApp theApp;


// CTaurusApp initialization

BOOL CTaurusApp::InitInstance()
{
	// InitCommonControlsEx() is required on Windows XP if an application
	// manifest specifies use of ComCtl32.dll version 6 or later to enable
	// visual styles.  Otherwise, any window creation will fail.
	INITCOMMONCONTROLSEX InitCtrls;
	InitCtrls.dwSize = sizeof(InitCtrls);
	// Set this to include all the common control classes you want to use
	// in your application.
	InitCtrls.dwICC = ICC_WIN95_CLASSES;
	InitCommonControlsEx(&InitCtrls);

	CWinApp::InitInstance();


	AfxEnableControlContainer();

	// Create the shell manager, in case the dialog contains
	// any shell tree view or shell list view controls.
	//CShellManager *pShellManager = new CShellManager;

	// Activate "Windows Native" visual manager for enabling themes in MFC controls
	CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));

	// Standard initialization
	// If you are not using these features and wish to reduce the size
	// of your final executable, you should remove from the following
	// the specific initialization routines you do not need
	// Change the registry key under which our settings are stored
	// TODO: You should modify this string to be something appropriate
	// such as the name of your company or organization
	SetRegistryKey(_T("Local AppWizard-Generated Applications"));

  /*
	CTaurusDlg dlg;
	m_pMainWnd = &dlg;
	INT_PTR nResponse = dlg.DoModal();
	if (nResponse == IDOK)
	{
		// TODO: Place code here to handle when the dialog is
		//  dismissed with OK
	}
	else if (nResponse == IDCANCEL)
	{
		// TODO: Place code here to handle when the dialog is
		//  dismissed with Cancel
	}
	else if (nResponse == -1)
	{
		TRACE(traceAppMsg, 0, "Warning: dialog creation failed, so application is terminating unexpectedly.\n");
		TRACE(traceAppMsg, 0, "Warning: if you are using MFC controls on the dialog, you cannot #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS.\n");
	}


	// Delete the shell manager created above.
	if (pShellManager != NULL)
	{
		delete pShellManager;
	}
  */
  CAppGlobalInstanceSet* pAGSet = CAppGlobalInstanceSet::getInstance();
  CSystemEnvironment* pSysEnv = pAGSet->getSystemEnvironment();
  pSysEnv->createEnvionment();

  //configure logger
  CStringA strPath ( pSysEnv->getLoggerCfgPath());
  strPath += "logger.cfg";
  dcmtk::log4cplus::PropertyConfigurator::doConfigure((const char*)strPath);

  CMainFrame* pMainFrame = new CMainFrame;
  m_pMainWnd = pMainFrame;
  DWORD dwStyle = WS_POPUP | WS_SYSMENU | WS_MINIMIZEBOX | WS_EX_TRANSPARENT;
  pMainFrame->LoadFrame(IDR_MAINFRAME, dwStyle, NULL, NULL);
  pMainFrame->ShowWindow(SW_SHOW);
  pMainFrame->UpdateWindow();
  
  CMonitorAdmin* pMA = pAGSet->getMonitorAdmin();
  pMA->init();

  IViewerModule* pViewer = pAGSet->getViewer();
  pViewer->init(pAGSet);

  IWorklistModule* pWorklist = pAGSet->getWorklist();
  pWorklist->init(pAGSet);

  doConfigure();
	// Since the dialog has been closed, return FALSE so that we exit the
	//  application, rather than start the application's message pump.
	return TRUE;
}

DWORD CTaurusApp::doConfigure()
{
  CAppGlobalInstanceSet* pAGSet = CAppGlobalInstanceSet::getInstance();

  CSystemEnvironment* pSYSEnv = pAGSet->getSystemEnvironment();
  CString strPropertyPath = pSYSEnv->getPropertyPath();
  strPropertyPath += _T("viewer_property.xml");

  MSXML2::IXMLDOMDocument2Ptr pPropDoc = XmlFunc::OpenXmlDocFile(strPropertyPath);
  
  IViewerModule* pViewer = pAGSet->getViewer();
  pViewer->setProperty(pPropDoc);
  
  return ERROR_SUCCESS;
}

